<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>ECMA测试</title>
  </head>
  <body>
    <script>
      //  1.  Javascript 的数据类型有几种？分别又有哪些类型？（5）
      //答：8种，number类型，string类型，null类型，object类型，boolean类型，undefined类型，bigint类型，symbole类型

      //  2.  return 有那两个作用？ 构造函数里return会怎么样？（5）
      //答：  返回值，并停止函数。    会返回值并终止循环

      //  3.  undefined 和 null 的区别？什么时候会得到undefined？（5）
      //答：undefined是未定义，null是空。  声明 但不赋值 时会得到undefined

      //  4.  使用 continue 或 break 终止循环时，两种方式的区别是？（5）
        //答：continue 是跳出这次循环并继续， break是终止该循环。  

      //  5.  如何判断字符串内是否包含指定字符？（5）
        //答：includ[]查看是否有指定字符

      //  6. 值传递和引用传递的区别？ （5）
      //答：值传递只传递参数，引用传递会传递地址

      //  7. 请尽量列举出数组的方法,并注明其作用以及会不会修改原数组，至少10种（10）
      /* 答：
      splice方法  会修改原数组  作用：能够修改数组中间的item的事情
      shift方法   会修改原数组  作用：能够删除数组头部的item
      unshift方法 会修改原数组  作用：能够增添数组头部的item
      pop方法     会修改原数组  作用：能够删除数组尾部的item
      push方法     会修改原数组   作用：能够添加数组尾部的item
      slice方法   不会修改原数组  作用：截取字符串
      sort方法   不会修改原数组    作用：排序数组
      concat方法 不会修改原素组  作用：链接数组的item
      join方法  不会修改原数组  作用：把数组的所有item链接成一个字符串并返回一个字符串
      forEach方法 不会修改原数组   作用：遍历数组中每一个item
       */
      //  8.  请写出以下输出的结果和原因；（10）
      var bar = true,
        number = 0;
      console.log(bar + 0);
      console.log(bar + 'xyz');
      console.log(bar + true);
      console.log(+true);
      console.log(!'bluej');
      console.log(number++);
      console.log(++number);
      console.log(number);
      10 > 20 || console.log('haha');
      10 > 20 && console.log('haha');

      /*
      答：
      1. 输出为1   因为 true被隐性转化为number类型 所以  输出为 1+0
      2. 输出为truexyz  ture被隐性转化为字符串
      3. 输出为 2   两个布尔值被+号隐性转化为了number类型变成了 1 + 1
      4. 输出为 1   +号使布尔值自增
      5. 输出为 false  !号使string隐形转化为Boolean类型，并且为！为非 所以输出为 false
      6. 输出为  0 number在打印之后自增
      7. 输出为 2   number在打印前自增所以是 1+1 输出为2
      8. 输出为 2   输出以上自增之后的number 所以为2
      9. 输出为 haha  ||或 运算符只至少一个为真，则执行第一个为真的值  
      10. 不输出    &&与 元素符要全部为真时，才会执行，或者在遇到第一个假时停止计算
       */
      //  9. 将多个数组进合并后再去重；对于去重的方案要求3种及以上（10）
      var arr1 = [1, 2, 3],
        arr2 = [2, 3, 4, 5];

         // 第一种，sort方法排序后去重
        /* var arr3 = arr1.concat(arr2);
       arr3.sort (function(a,b){
        return a-b;
       })
    for(var i =0;i<arr3.length;i++){
        if (arr3[i] === arr3[i + 1]) {
        arr3.splice(i, 1);
        i--;
        } 
    }
    console.log(arr3); */

     /*  10.将 str="再见，还会再见吗燕子，再见的时候你要幸福好不好，燕子你要开心，你要幸福，好不好，开心啊，幸福！
     你的世界以后没有我了，没关系你要幸福，🚗~~ 🏃🏻~~燕子 🧎🏻燕子~~没有你我怎么活啊🚗~~ 🏃🏻~~燕子 🧎🏻燕子~~没有你我怎么活啊🚗~~ 🏃🏻~~燕子 
     🧎🏻燕子~~没有你我怎么活啊燕子，燕子，燕子，燕子，燕子，燕子，燕子你把我带走吧，燕子！"里面的所有"燕子"替换成"jack"不要用replaceAll(10) */
      
      /*答：var name="jack"
        str=str.replace(/燕子/g,name)
        console.log(str);
      */

      //11. 找出数组中年龄小于18岁的女生(girl)的信息重新组成新的数组,并且将她们count变为现有的平方（10）
      var newArr  = [];
      var arr3 = [
        { name: '彭于晏', sex: 'boy', age: 18, count: 20 },
        { name: '迪丽热巴', sex: 'girl', age: 17, count: 30 },
        { name: '吴彦祖', sex: 'boy', age: 16, count: 40 },
        { name: '古力娜扎', sex: 'girl', age: 15, count: 50 },
        { name: '刘德华', sex: 'boy', age: 20, count: 60 },
        { name: '刘亦菲', sex: 'girl', age: 13, count: 70 },
        { name: '张学友', sex: 'boy', age: 14, count: 80 },
      ];
      var j = 0;
      for(var i in arr3){
        if(arr3[i].age < 18,arr3[i].sex === 'girl'){
        newArr[j++] = arr3[i]
        }
      }
      
    console.log(newArr);
      


      // 12. 统计字符串'abbcccddddd'中每个字符出现的次数，统计数组['a','b','b','c','c','c','d','d','d','d','d'中每个字符出现的次数(10分)
      //字符串
      /* var arr1 = 'abbcccddddd'
      var res = [];
      function newArr(arr1){
       
        for(var i =0;i<arr1.length;i++){
          if (res[arr1[i]]) {
          res[arr1[i]] += 1;
        } else {
          res[arr1[i]] = 1;
        }
        }
      }
      newArr(arr1);
      console.log(res); */
      //数组
      /* var arr2= ['a','b','b','c','c','c','d','d','d','d','d']
      var obj = arr2.reduce(function (prev, item) {
      if (prev[item]) {
        prev[item] += 1;
        return prev;
      } else {
        prev[item] = 1;
        return prev;
      }
      return prev;
      }, {});
      console.log(obj); */
    </script>
  </body>
</html>
